Best practices in the development of quality software call for testing code under development at many points. Manual software testing is very expensive in terms of time, money, and other resources, and may not exercise the code sufficiently. Tools have been developed to mitigate these costs by generating test cases automatically. A test case is a set of inputs such as conditions or variables under which a tester will determine whether the code under development meets specifications.
Existing approaches have at least three major drawbacks: First, they are not fully automated, requiring continuing manual intervention. Second, they produce insufficiently relevant test cases, resulting in tests which serve no useful purpose. Third, they produce too many redundant test cases.
A relevant test case exercises a scenario similar to the scenarios which a user of the code is likely to exercise. A redundant test case exercises the same execution path, i.e., the same sequence of statements, as another test case. A collection of test cases is referred to as a “test suite.” Adequate testing calls for a test suite of relevant and non-redundant test cases. Currently available tools still require manual intervention, test useless test cases, and test the same execution paths, resulting in wasted time, money, and other resources.
There is a need for automated software testing which is capable of providing, with minimal human intervention, a test suite comprised of relevant test cases which are non-redundant.